#ifndef GRAPHICS_RENDERER_H
#define GRAPHICS_RENDERER_H

#include "cml/cml.h"
#include "boost/scoped_array.hpp"

#include "graphics/camera.h"
namespace graphics{

class Renderer{
public:
    virtual int Initialize(const bool & fullscreen, const uint32 & width, const uint32 & height) = 0;
    virtual int Shutdown() = 0;
    virtual int Reset() = 0;

    virtual int ToFullcreen();
    virtual int ToWindowed();
    virtual int ChangeResolution(int width, int height);

    virtual int Render(const Camera & camera){
        
    }

    
    
    virtual cml::Handedness GetHandedness() = 0;
    virtual cml::ZClip GetZClip() = 0;
protected:
    uint32 width_, height_;
    bool fullscreen_;

    SceneNode * scene_graph;
};

class DirectxRenderer;


class OpenglRenderer : public Renderer{
    int Initialize();
    int Shutdown();

    int Render(const Camera * camera);

    cml::Handedness GetHandedness(){return cml::right_handed;}
    cml::ZClip GetZClip() {return cml::z_clip_neg_one;}
};

}

#endif //GRAPHICS_RENDERER_H